package ar.republicagroup.gestion.dao.jpa;

import ar.republicagroup.gestion.dao.CalendarioBancarioDAO;
import ar.republicagroup.gestion.entities.CalendarioBancario;
import ar.republicagroup.gestion.util.JPAUtil;
import ar.republicagroup.gestion.util.messages.UIMessages;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import org.apache.log4j.Logger;

/**
 *
 * @author DIEGOALV
 */
public class CalendarioBancarioDAOImplJPA implements CalendarioBancarioDAO {
    
    private EntityManager em;
    private static Logger log = Logger.getLogger(CalendarioBancarioDAOImplJPA.class);

    public CalendarioBancarioDAOImplJPA() {
        em = JPAUtil.getEntityManager();
    }
    

    @Override
    public Set<CalendarioBancario> findEntities() {
       if(!em.isOpen()) { em = JPAUtil.getEntityManager(); }
       log.info("Obteniendo feriados del anho...");
       List<CalendarioBancario> list = em.createQuery("SELECT cb FROM CalendarioBancario cb WHERE cb.vigente = 1 ORDER BY cb.fechaFeriado ASC").getResultList();
       Set<CalendarioBancario> calendarioBancarioSet = new HashSet(list);
       return calendarioBancarioSet;
    }

    @Override
    public String insert(CalendarioBancario nuevoFeriado) {
                String resultado = null;
		try{
			em.getTransaction().begin();
			em.persist(nuevoFeriado);
			em.getTransaction().commit();
			resultado = UIMessages.getInfoMessage("onCompleteInsert");
                        log.info("Insertando nuevo feriado...");
		}catch(Exception ex){
                        log.error("Error insertando nuevo feriado",ex);
			em.getTransaction().rollback();
                        
		}
		
                finally{
                        em.close();
                        return resultado;
                        }	
    }

    @Override
    public String delete(CalendarioBancario feriado) {
                String mensaje = null;
                try{
                    em.getTransaction().begin();
                    em.merge(feriado);
                    em.getTransaction().commit();
                    mensaje = "Se eliminó el feriado";
                    }catch(Exception ex){
			em.getTransaction().rollback();
			log.error("Error al eliminar feriado",ex);
			}
		return mensaje;
    }
    
    
}
